<?php
/**
 * Created by PhpStorm.
 * User: stupboy
 * Date: 2018/5/29
 * Time: 16:17
 * Mail:87658989@qq.com
 */

namespace app\adminapi\controller;

use app\adminapi\model;
use app\adminapi\validate\CompanyValidate;
use app\adminapi\validate\Report;
use app\base\service\Csv;
/**
 * @name【公司管理】
 * @baseurl【adminapi/Company】
 * @file【Company.php】
 */
class Company extends Base
{
    /**
     * @name【单位列表】
     * @desc【单位列表】
     * @uri【companyList】
     * @method【post】
     * @param【
     * token $ string $ abc $ 验证字符 $ 1 #
     * uid $ int $ 1 $ 用户id $ 1 #
     * fields $ string $ driver_id,name $ 字段名称 #
     * where_json $ json $ {"order_id":["in","6,7,8"],"name":["like","%王%"]} $ 查询条件 #
     * page $ int $ 1$ 页数 #
     * pagenum $ int $ 10 $记录数
     * 】
     * @return【
     * code $ int $ number|1-1 $ 校验码#
     * msg $ string $  $ 错误信息 #
     * data $ json $ $ 订单列表 #
     * description $ json $ $ 接口说明
     * 】
     */
    public function companyList(){
        $report = new Report();
        $param  = $report->scene('report')->getCurrentData();
        $report->goCheck($param);
        $where     = json_decode($param['where_json'],true);
        list($code,$data) = (new model\Company())->companyList($param['fields'],$where,$param['page'],$param['pagenum']);
        if($code==1){
            return $this->retSucc($data);
        }else{
            return $this->retError($data);
        }
    }

    /**
     * @name【单位列表下载】
     * @desc【单位列表下载】
     * @uri【downLoadCompanyList】
     * @method【post】
     * @param【
     * token $ string $ abc $ 验证字符 $ 1 #
     * uid $ int $ 1 $ 用户id $ 1 #
     * fields $ string $ order_id,passenger_name $ 字段名称 #
     * where_json $ json $ {"order_id":["in","6,7,8"],"name":["like","%王%"]} $ 查询条件 #
     * counts $ int $ 1$ 下载数据记录数
     * 】
     * @return【
     * code $ int $ number|1-1 $ 校验码#
     * msg $ string $  $ 错误信息 #
     * data $ json $ $ 订单列表 #
     * description $ json $ $ 接口说明
     * 】
     */
    public function downLoadCompanyList(){
        set_time_limit(300);
        $csv       = new Csv();
        $report = new Report();
        $param  = $report->scene('download')->getCurrentData();
        $report->goCheck($param);
        $where     = json_decode($param['where_json'],true);
        $totalPage = $param['counts'] % 2000 == 0 ? $param['counts']/2000 : floor($param['counts']/2000) + 1;
        $f = [];
        for($i=1;$i<=$totalPage;$i++){
            list($code,$data) = (new model\Company())->companyList($param['fields'],$where,$i,2000);
            if($code==0) continue;
            if(empty($data['data'])) break;
            $csv->open($data['fields']);
            $csv->writeAll($data['data']);
            $f[] = $csv->myClose();
        }
        $csv->mergeCsvToDownload($f);
    }

    /**
     * @name【新增单位】
     * @desc【新增单位】
     * @uri【add】
     * @method【post】
     * @param【
     * user_id $ int $ 10 $ 用户id  $ 1 #
     * area_id $ int $ 10 $ 区域id  #
     * company_name $ string $ 厦门xxx测试公司 $ 公司或单位名称 $ 1 #
     * short_name $ string $ 厦门xxx测试公司 $ 简称 $ 1 #
     * company_mode $ int $ 1 $ 1： 单位；2：服务公司 $ 1 #
     * address $ string $ 福建省厦门市 $ 地址 $ 1 #
     * linkman $ string $ 王小明 $ 联系人 $ 1 #
     * phone $ string $ xxxxxxxxxx $ 联系电话 $ 1 #
     * remark $ string $  这是备注 $ 备注 #
     * is_zhuanpiao $ int $  1 $ 是否开专票 #
     * contractno $ string $  xxx-yyy-xxx-1234 $ 合同编号 #
     * manage_dept $ string $  $ 本单位车管部门 #
     * isreform $ int $  1 $ 是否参改带我 #
     * fundsform $ string $   $ 经费类型 #
     * orgn_grade $ string $   $ 单位级别 #
     * vehicle_nature $ string $   $ 财政类型 #
     * orgn_type $ string $   $ 法人类型 #
     * code $ string $   $ 代码 #
     * check_passenger_id $ int $  123 $ 审核乘客id #
     * is_limit $ int $  1 $ 打车是否不受支付限制 #
     * license $ string $  1 $ 营业执照图片 #
     * law_type $ int $  2 $ 1非行政执法 2 行政执法 #
     * prop $ string $   $ 车辆出行 #
     * sign $ string $  9 $ 是否签约，1：是，9：否 #
     * note $ string $   $ 公司备注 #
     * state $ string $  1 $ 1：启用 9：禁用 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * company_id $ int $ 1 $ 新增成功的单位ID#
     * 】
     * @return mixed|\think\response\Json|void
     * @throws \app\base\exception\BaseException
     * @throws \app\base\exception\RecordNotFoundException
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function add(){
        // 校验请求参数
        $validate = new CompanyValidate();
        // 获取所有请求参数
        $params = $validate->scene('add')->goCheck()->getCurrentData();

        $company = (new \app\adminapi\model\Company()) ->createOrUpdate($params);

        return $this->retSucc(['company_id' => $company->company_id]);
    }

    /**
     * @name【编辑单位】
     * @desc【编辑单位】
     * @uri【edit】
     * @method【post】
     * @param【
     * company_id $ int $ 10 $ 所属单位ID $ 1 #
     * user_id $ int $ 10 $ 用户id  #
     * area_id $ int $ 10 $ 区域id  #
     * company_name $ string $ 厦门xxx测试公司 $ 公司或单位名称 $ 1 #
     * short_name $ string $ 厦门xxx测试公司 $ 简称 $ 1 #
     * company_mode $ int $ 1 $ 1： 单位；2：服务公司 $ 1 #
     * address $ string $ 福建省厦门市 $ 地址 $ 1 #
     * linkman $ string $ 王小明 $ 联系人 $ 1 #
     * phone $ string $ xxxxxxxxxx $ 联系电话 $ 1 #
     * remark $ string $  这是备注 $ 备注 #
     * is_zhuanpiao $ int $  1 $ 是否开专票 #
     * contractno $ string $  xxx-yyy-xxx-1234 $ 合同编号 #
     * manage_dept $ string $  $ 本单位车管部门 #
     * isreform $ int $  1 $ 是否参改带我 #
     * fundsform $ string $   $ 经费类型 #
     * orgn_grade $ string $   $ 单位级别 #
     * vehicle_nature $ string $   $ 财政类型 #
     * orgn_type $ string $   $ 法人类型 #
     * code $ string $   $ 代码 #
     * check_passenger_id $ int $  123 $ 审核乘客id #
     * is_limit $ int $  1 $ 打车是否不受支付限制 #
     * license $ string $  1 $ 营业执照图片 #
     * law_type $ int $  2 $ 1非行政执法 2 行政执法 #
     * prop $ string $   $ 车辆出行 #
     * sign $ string $  9 $ 是否签约，1：是，9：否 #
     * note $ string $   $ 公司备注 #
     * state $ string $  1 $ 1：启用 9：禁用 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * updated $ int $  1 $ 更新记录条数#
     * 】
     * @return mixed|\think\response\Json|void
     * @throws \app\base\exception\BaseException
     * @throws \app\base\exception\RecordNotFoundException
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function edit(){
        // 校验请求参数
        $validate = new CompanyValidate();
        // 获取所有请求参数
        $params = $validate->scene('edit')->goCheck()->getCurrentData();

        $result = (new \app\adminapi\model\Company()) ->createOrUpdate($params);

        return $this->retSucc(['updated' => $result]);
    }

    /**
     * @name【删除单位】
     * @desc【删除单位】
     * @uri【delete】
     * @method【post】
     * @param【
     * company_ids $ int $ 1 $ 单位ID，多个请用','号连接 $ 1 #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * deleted $ int $  1 $ 删除的记录条数#
     * 】
     * @throws \app\base\exception\BaseException
     */
    public function delete(){
        // 校验请求参数
        $validate = new CompanyValidate();
        // 获取所有请求参数
        $params = $validate->scene('delete')->goCheck()->getCurrentData();

        $user = new model\User();
        $session = $user->getLoginUser();
        $user->checkAdminAuth($session, model\User::AUTH_SCOPE_SUPER_ADMIN);

        $result = \app\adminapi\model\Company::destroy($params['company_ids']);

        return $this->retSucc(['deleted' => $result]);
    }
}